
package testemodulorede;

import javax.swing.*;

public class GamePanel {

    private LanModule lanModule;
    private Chat chat;
    private String player;
    private String avatar;
    private int id;

    public GamePanel(){
        
        String op;
        
        op = JOptionPane.showInputDialog("Digite s p/ server e c p/ client");

        player = JOptionPane.showInputDialog("Digite o seu nome: ");

        avatar = JOptionPane.showInputDialog("Digite o nome do avatar: ");

        if( op.equals("s") ){
            lanModule = new ServerModule( this, pkgGenerator( "1:CLIENT_DATA:" + avatar + ":" + player ), 2 );
            id = 0;
            
        }
        else if( op.equals("c") ){
            lanModule = new ClientModule( this, pkgGenerator( "1:CLIENT_DATA:" + avatar + ":" + player ), "127.0.0.1", 12345 );
            
        }

        chat = new Chat( this, player, avatar );
        Thread tChat = new Thread(chat);
        tChat.start();
        lanModule.startService();
        
        
    }

    public void gameAction(String _message){

        actionParser( _message );

    }

    public synchronized void sendPackage( String _message){

        lanModule.sendPackage( pkgGenerator(_message) );

    }

    public static void main( String[] args){

        new GamePanel();
        

    }

    private String pkgGenerator( String _message ){

        char msgNumber = _message.charAt(0);
        String msgContent = _message.substring(2);

        if( msgNumber != '1' ){
            
            _message = msgNumber + ":" + id + ":" + msgContent;

        }
        else{
            
            _message = msgNumber + ":" + msgContent;
            
        }

        return _message;
    }

    /* pega a string recebida do servidor e realiza ações
     * (faz chamadas de métodos) a partir dos dados presentes nela.
     *
     * */
    private void actionParser( String _input ){

        char pkgNumber = _input.charAt(0);
        int pkgId = (int)_input.charAt(2);

        switch( pkgNumber ){

            /*Nao há case 1 pois pacotes do tipo 1 não são interpretados pelo
             * game, apenas enviados!
             */

            case '2': // GAME_DATA

                /* Este bloco é responsável pelo início do jogo. ele deve inter
                 * pretar a string GAME_DATA, e instanciar os player a partir
                 * dela com nome, id e avatar.
                 *
                 */

                System.out.println(_input);

                break;

            case '3': // SHOT

                /* Aqui deve ser feito um teste, e incrementada uma variavel id,
                 * uma vez que os tiros marcarão os fins e principios de turno.
                 * Se for a vez do player jogar, deve-se realizar a ação de tiro
                 * informada na string, e depois liberar o console para
                 * o mesmo jogar, do contrario, deve-se apenas realizar a ação
                 * de tiro para o id especificado na string, e depois,
                 * incrementada a variavel id de turno.
                 **/

                int _shotEnergy = (int)_input.charAt(4);

                actionShot( pkgId, _shotEnergy );
                
                System.out.println( _input );

                break;
                
            case '4': // WALK_LEFT
                
                actionWalkLeft( pkgId );
                
                break;
                
            case '5': // WALK_RIGHT
                
                actionWalkRight( pkgId );
                
                break;
                
            case '6': // TARGET_LEFT
                
                actionTargetLeft( pkgId );
                
                break;
                
            case '7': // TARGET_RIGHT
                
                actionTargetRight( pkgId );
                
                break;
                
            case '8': // CHAT
                
               chat.incomingMessage(_input);
            
               break;
               
            case '9': // ID
                
               id = (int)_input.charAt(2);
               System.out.println("My id: " + id);
               
               break;
                
        }


    }

    private void actionShot( int _pkgId, int _shotEnergy ){

        // faz o avatar de id = _pkgId dar um tiro com energia = _shotEnergy

    }

    private void actionWalkLeft( int _pkgId ){

        // faz o avatar de id = _pkgId dar um passo para a esquerda

    }

    private void actionWalkRight( int _pkgId ){

        // faz o avatar de id = _pkgId dar um passo para a direita

    }

    private void actionTargetLeft( int _pkgId ){

        // faz o avatar de id = _pkgId voltar sua mira para a esquerda

    }

    private void actionTargetRight( int _pkgId ){

        // faz o avatar com id = _pkgId voltar sua mira para a direita

    }

}
